/**
 * Koa
 */
const Koa = require('koa');
const koaJson = require('koa-json');
const bodyParser = require('koa-bodyparser');

const path = require('path');
const http = require('http');
const fs = require('fs');

/**
 * 异步函数
 */
const async = require('async');

/**
 * query 对象
 */
const query = require('./mysql.js');

/**
 * koa
 */
const app = new Koa();

/**
 * bodyParser koaJson
 */
app.use(bodyParser());
app.use(koaJson());

/**
 * async 异步请求
 */
app.use(async(ctx, next) => {
    ctx.execSql = query; //函数赋值
    await next();
});


/**
 * routes 异步读取文件
 */
fs.readdirSync(path.join(__dirname, 'routes')).forEach(function (file) {
    if (~file.indexOf('.js')) app.use(require(path.join(__dirname, 'routes', file)).routes());
});

/**
 * function 
 */
app.use(function (ctx, next) {
    console.log('资源找不到了');
    ctx.redirect('/404.html');
});

/**
 * 监听时间
 */
app.on('error', (error, ctx) => {
    console.log('something error ' + JSON.stringify(ctx.onerror))
    ctx.redirect('/500.html');
});

/**
 * 启动服务 - 8000
 * 
 * fix 后续可以修改为Java项目 提供接口调用服务
 * 
 * springboot项目
 */
http.createServer(app.callback())
    .listen(8000)//监听事件
    .on('listening', function () {
    console.log('Node服务启动!Server listening on:' + 8000)
});